package com.chen.service;

import com.chen.runnabletask.ServiceThread;
import com.chen.util.Constant;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class ServiceTC {
    // 创建集合Map，收集每个客户端的信息
    // 用户名作为键，管道对象作为值，尽管管道对手唯一，
    // 用户名可能重复，但是这个姓名会检查用户名唯一，不允许重复，重复就会提升无法登录
    public static final Map<String, Socket> userSocketMap = new ConcurrentHashMap<>();

    public static void main(String[] args) {
        // 创建服务器
        System.out.println("服务器启动...");
        try {
            ServerSocket serverSocket = new ServerSocket(Constant.SERVER_PORT);
            // 等待客户端连接
            while (true) {
                Socket socket = serverSocket.accept();
                // 这里也有发现，本来想使用界面保存的AppContext的，最后发现不能跨线程使用，
                // 最终只能放弃，改用以前的构造传参
                // 将获取到的管道交给子线程处理，主线程循环等待客户端建立的连接
                new Thread(new ServiceThread(socket)).start();
                System.out.println("有客户端上线了，IP地址: " + socket.getInetAddress().getHostAddress() + "端口号：" + socket.getPort());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
